﻿# -*- coding: utf-8 -*-
import gluon.utils as utils
import gluon.utils as utils

@auth.requires_any_membership([auth.grupa_administrator,auth.grupa_moderator_instytutowy])
def dodaj():
	response.tytul_strony='Dodaj pracownika'
	form=ProfessorsSQLFORM(db.pracownicy,modyfikuj_formularz=[mod_form_walidator_jedno_niepuste('nr_domu','nr_mieszkania')])  #crud.create(db.pracownicy)
	if auth.has_membership(auth.grupa_administrator):
		role=[r.nazwa for r in db().select(db.rola.nazwa)]
		form.insert(0, SELECT(role, _name='rola'))
	if form.accepts(request.vars, session):
		haslo=auth.random_password()
		response.haslo = haslo
		
		if auth.has_membership(auth.grupa_administrator):
			id_rola = db(db.rola.nazwa==request.vars.rola).select(db.rola.id)[0].id
		else:
			id_rola = db(db.rola.nazwa=='Pracownik').select(db.rola.id)[0].id
		
		x=db.uzytkownicy.insert(password=utils.md5_hash(haslo), id_rola=id_rola, id_pracownik=form.vars.id)
		redirect(URL(a='instytut',c='home',f='komunikat', vars={'message': "Dodano pracownika, hasło: " +haslo }))

		#if auth.settings.mailer.send(to=form.vars.email, 
		#	subject=auth.messages.retrieve_password_subject, 
		#	message=auth.messages.retrieve_password % dict(password=haslo)):
		#	x=db.uzytkownicy.insert(password=utils.md5_hash(haslo), id_rola=id_rola, id_pracownik=form.vars.id)
		#	redirect(URL(a='instytut',c='home',f='komunikat', vars={'message': "Dodano pracownika i wysłano mail z hasłem"}))
		#else:
		#	return dict(form=form)

	return dict(form=form)

@auth.requires_any_membership([auth.grupa_administrator,auth.grupa_moderator_instytutowy])
def usun():
	response.tytul_strony='Usuwanie pracownika'
	try:
		record_id=int(request.vars['id'])
	except:
		return "<h1>Invalid url</h1>"
		
	db(db.publikacje_pracownicy.id_pracownik==record_id).delete()
	db(db.granty_pracownicy.id_pracownik==record_id).delete()
	db(db.uzytkownicy.id_pracownik==record_id).delete()
	del db.pracownicy[record_id]
	redirect(URL(a='instytut',c='home',f='komunikat', vars={'message': "Usunięto pracownika"}))

@auth.requires_any_membership([auth.grupa_administrator,auth.grupa_moderator_instytutowy,auth.grupa_pracownik])
def lista():
	response.tytul_strony='Lista pracownikow'
	if auth.has_any_membership([auth.grupa_administrator,auth.grupa_moderator_instytutowy]):
		bonus=[link_usun, link_modyfikuj]
	else:
		bonus=[]
	linki=[link_pokaz]+bonus
	form=crud.select(db.pracownicy, query=db.pracownicy.id>1, fields=[db.pracownicy.id_tyt_nauk, db.pracownicy.imie, db.pracownicy.nazwisko, db.pracownicy.id_instytut], linki=linki, truncate=20)
	return dict(form=form)

@auth.requires_login()
def pokaz():
	response.tytul_strony='Pracownik'
	try:
		if isinstance(request.vars['id'],list): record_id=int(request.vars['id'][0])
		else: record_id=int(request.vars['id'])
	except:
		return "<h1>Invalid url</h1>"
	if record_id==1:
		redirect(URL(a='instytut',c='home',f='komunikat', vars={'message': "Konto specjalne, nie do modyfikacji"}))
	record=db.pracownicy[record_id]
	if record:
		if auth.has_any_membership([auth.grupa_administrator,auth.grupa_moderator_instytutowy]) or auth.user.id_pracownik==record_id:
			#przenies na strone modyfikacji
			#redirect(URL(a='instytut',c='pracownicy',f='modyfikuj?id=%s' % record_id))
			fields=pracownik_all
			is_admin=True
		else:
			fields=pracownik_black
			is_admin=False
		
		query=(db.publikacje_pracownicy.id_pracownik==record_id)&(db.publikacje.id==db.publikacje_pracownicy.id_publikacja)
		publikacje_dane=db(query).select(db.publikacje.id,db.publikacje.tytul, db.publikacje.nazwa_czasopisma, db.publikacje.rok, db.publikacje.punkty, orderby= (db.publikacje.rok | db.publikacje.nazwa_czasopisma))
		
		response.suma_punktow=0
		#print publikacje_dane[0].keys()
		for r in publikacje_dane:
			response.suma_punktow+=r['punkty']

		if len(publikacje_dane)==0: 
			publikacje='brak'
		else:
			publikacje=ProfessorsSQLTABLE(publikacje_dane,linki=[link_publikacja_pokaz])
		
		query=(db.granty_pracownicy.id_pracownik==record_id)&(db.granty.id==db.granty_pracownicy.id_grant)
		granty_dane=db(query).select(db.granty.id,db.granty.temat, db.granty.kwota,db.granty.rok_przyznania,db.granty.rok_zakonczenia, orderby=(db.granty.rok_przyznania | db.granty.rodzaj | db.granty.temat))
		if len(granty_dane)==0: 
			granty='brak'
		else:
			granty=ProfessorsSQLTABLE(granty_dane,linki=[link_grant_pokaz])
			
		return dict(
			form=ProfessorsSQLFORM(db.pracownicy,record,fields=fields, readonly=True,comments=False,showid=0),
			url_modyfikuj=URL(a='instytut',c='pracownicy',f='modyfikuj?id=%s' % record_id),
			publikacje=publikacje,
			granty=granty,
			is_admin=is_admin
			)
	else:
		return "<h1>Invalid url</h1>"
	

@auth.requires_login()
def modyfikuj():
	response.tytul_strony='Pracownik'
	try:
		if isinstance(request.vars['id'],list): record_id=int(request.vars['id'][0])
		else: record_id=int(request.vars['id'])
	except:
		return "<h1>Invalid url</h1>"
	if record_id==1:
		redirect(URL(a='instytut',c='home',f='komunikat', vars={'message': "Konto specjalne, nie do modyfikacji"}))
	if auth.has_any_membership([auth.grupa_administrator,auth.grupa_moderator_instytutowy]) or auth.user.id_pracownik==record_id:
		record=db.pracownicy[record_id]
		if not auth.has_any_membership([auth.grupa_administrator,auth.grupa_moderator_instytutowy]):
			readonly_fields=pracownik_zmiana_prac
		else:
			readonly_fields=[]
		form=crud.update(db.pracownicy,record,deletable=0,readonly_fields=readonly_fields,modyfikuj_formularz=[mod_form_walidator_jedno_niepuste('nr_domu','nr_mieszkania')])
		
		query=(db.publikacje_pracownicy.id_pracownik==record_id)&(db.publikacje.id==db.publikacje_pracownicy.id_publikacja)
		publikacje_dane=db(query).select(db.publikacje.id,db.publikacje.tytul, db.publikacje.nazwa_czasopisma, db.publikacje.rok,)
		if len(publikacje_dane)==0: 
			publikacje='brak'
		else:
			publikacje=ProfessorsSQLTABLE(publikacje_dane,linki=[link_publikacja_pokaz])
		
		query=(db.granty_pracownicy.id_pracownik==record_id)&(db.granty.id==db.granty_pracownicy.id_grant)
		granty_dane=db(query).select(db.granty.id,db.granty.temat, db.granty.kwota,db.granty.rok_przyznania,db.granty.rok_zakonczenia)
		if len(granty_dane)==0: 
			granty='brak'
		else:
			granty=ProfessorsSQLTABLE(granty_dane,linki=[link_grant_pokaz])
		
		return dict(request.vars,form=form, publikacje=publikacje, granty=granty)
	else:
		redirect(auth.settings.on_failed_authorization)
	return dict(request.vars,form=form)
	

